ahi.device
For Low-level Access
Not too hard. Just open ahi.device
unit AHI_NO_UNIT
and
initialize AHIBase
. After that you can access all the functions of
the device just as if you had opened a standard shared library.
Assembler
For the assembler programmer there are two handy macros: OPENAHI
and CLOSEAHI
. Here is a small example how to use them:
OPENAHI 4 ;Open at least version 4. lea _AHIBase(pc),a0 move.l d0,(a0) beq error ; AHI's functions can now be called as normal library functions: move.l _AHIBase(pc),a6 moveq #AHI_INVALID_ID,d0 jsr _LVOAHI_NextAudioID(a6) error: CLOSEAHI rts
Note that you have to execute the CLOSEAHI
macro even if
OPENAHI
failed!
C
For the C programmer, here is how it should be done:
struct Library *AHIBase; struct MsgPort *AHImp=NULL; struct AHIRequest *AHIio=NULL; BYTE AHIDevice=-1; if(AHImp = CreateMsgPort()) { if(AHIio = (struct AHIRequest *) CreateIORequest( AHImp, sizeof(struct AHIRequest))) { AHIio->ahir_Version = 4; /* Open at least version 4. */ if(!(AHIDevice = OpenDevice(AHINAME, AHI_NO_UNIT, (struct IORequest *) AHIio, NULL))) { AHIBase = (struct Library *) AHIio->ahir_Std.io_Device; // AHI's functions can now be called as normal library functions: AHI_NextAudioID(AHI_INVALID_ID); CloseDevice((struct IORequest *) AHIio); AHIDevice = -1; } DeleteIORequest((struct IORequest *) AHIio); AHIio = NULL; } DeleteMsgPort(AHImp); AHImp = NULL; }
Go to the first, previous, next, last section, table of contents.